package com.gengzp.system.service;

import com.gengzp.common.model.pagination.resp.PaginationResponse;
import com.gengzp.common.model.task.req.CreateScheduledTaskReq;
import com.gengzp.common.model.task.req.EditScheduledTaskReq;
import com.gengzp.common.model.task.req.EditScheduledTaskStatusReq;
import com.gengzp.common.model.task.req.PageScheduledTaskReq;
import com.gengzp.common.model.task.resp.PageScheduledTaskResp;
import com.gengzp.common.model.task.resp.SearchScheduledTaskResp;

/**
 * @ClassName ScheduledTaskService
 * @Description 定时任务管理模块服务层接口
 * @Author gengzp
 * @Date 2025/9/30 11:25
 */
public interface ScheduledTaskService {

    /**
     * 创建定时任务
     *
     * @param req 创建定时任务请求参数
     */
    void createScheduledTask(CreateScheduledTaskReq req);

    /**
     * 修改定时任务开启状态
     *
     * @param req 修改定时任务开启状态请求参数
     */
    void editScheduledTaskStatus(EditScheduledTaskStatusReq req);

    /**
     * 编辑定时任务
     *
     * @param req 编辑定时任务请求参数
     */
    void editScheduledTask(EditScheduledTaskReq req);

    /**
     * 根据id删除定时任务
     *
     * @param taskId 定时任务id
     */
    void removeScheduledTaskById(Long taskId);

    /**
     * 根据id查询定时任务详情
     *
     * @param taskId 定时任务id
     * @return 定时任务详情
     */
    SearchScheduledTaskResp searchScheduledTaskById(Long taskId);

    /**
     * 分页查询定时任务
     *
     * @param req 分页查询定时任务请求参数
     * @return 定时任务分页查询结果
     */
    PaginationResponse<PageScheduledTaskResp> pageQueryScheduledTask(PageScheduledTaskReq req);

    /**
     * 手动执行一次定时任务
     *
     * @param taskId 定时任务id
     */
    void doExecuteScheduledTask(Long taskId);

    /**
     * 唤醒定时任务执行器
     */
    void notifyScheduledTaskExecutor();

}
